/* Araujo Heiker CI. 19726991
 * Goyo Willandher CI.20666542
 * Rodriguez Rafael CI.20009872
 * Williams Roman CI.20016812 
 * Morett Gilberth CI.20929667*/

package controlador;

import vista.VentanaListaProducto;
import vista.VentanaProducto;
import modelo.Linea;
import modelo.Producto;
import modelo.Drogueria;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;

    public class ControladorVentanaProducto implements ActionListener {

	private VentanaProducto ventanaProducto;
	private String rutaim;
	private String codigoProducto;
	private Drogueria drogueria;
	private String imec;
	private boolean estatusImagen = false;

	public ControladorVentanaProducto(Drogueria drogueria, String imec,
			String codigo) {
		super();

		ventanaProducto = new VentanaProducto();
		ventanaProducto.agregarListener(this);
		ventanaProducto.setLocationRelativeTo(null);
		ventanaProducto.setVisible(true);

		this.drogueria = drogueria;
		this.llenarComboLinea();
		this.codigoProducto = codigo;
		this.imec = imec;
		this.generarCodigoProducto();
		this.inicializarVentana();
	}

	public ControladorVentanaProducto(VentanaProducto ventanaproducto,
			VentanaListaProducto ventanalistaproducto, String rutaim,
			String codigoProducto, Drogueria drogueria, Producto producto,
			int index, String imec) {
		super();
		this.ventanaProducto = ventanaproducto;
		this.rutaim = rutaim;
		this.codigoProducto = codigoProducto;
		this.drogueria = drogueria;
		this.imec = imec;
	}

	//Accion de los botones
	
	public void actionPerformed(ActionEvent e) {

		if (e.getActionCommand().equalsIgnoreCase("Guardar")) {
			if(estatusImagen==true)
			incluirProducto();
			else
				ventanaProducto.mostrarMensaje("ERROR! Debe de Seleccionar Una Imagen!");

		} else if (e.getActionCommand().equalsIgnoreCase("Imagen")) {
			subirImagen();
			estatusImagen = true;
		} else if (e.getActionCommand().equalsIgnoreCase("Modificar")) {
			aceptarPoducto();
			clickAceptar();

		} else {
			clickCancelar();
		}

	}
	
	//Este metodo permite controlar especificamente por cual opcion se esta instanciando el controlador de la pantalla modificar producto,
			//dependiendo del string recibido; es decir si es modificar, o Buscar

	public void inicializarVentana() {

		if (imec.equals("Modificar")) {
			ventanaProducto.desaparecerBoton(0);
			modificarProducto();

		} else if (imec.equals("Buscar")) {
			buscarProducto();
			ventanaProducto.desaparecerBoton(0);
			ventanaProducto.desaparecerBoton(1);
			ventanaProducto.desaparecerBoton(2);
		} else

			ventanaProducto.desaparecerBoton(1);
	}
	
    //Metodo que permite registrar un determinado producto
	
	public void incluirProducto() {

		if (
				 (ventanaProducto.getjTxtNombre().equals(""))
				|| (ventanaProducto.getjTxtPresentacion().equals(""))
				|| (ventanaProducto.getjLimagen().equals(""))) {
             
              
			ventanaProducto.mostrarMensaje("Por Favor Ingrese todo los Datos");
              
		} else {
			String nombre;
			String ruta;
			String presentacion;
			String codigoProducto;
			Linea linea;
			String codlinea = (String) ventanaProducto.getCmbLinea()
					.getSelectedItem();
			String cod = codlinea.substring(0, 4);
			int co = drogueria.buscarLinea(cod);
			linea = drogueria.getUnaLinea(co);
			nombre = ventanaProducto.getjTxtNombre();
			ruta = rutaim;
			codigoProducto = ventanaProducto.getJtxtcodigoproducto();
			presentacion = ventanaProducto.getjTxtPresentacion();
			Producto producto = new Producto();
			producto.setCodigoProducto(codigoProducto);
			producto.setNombre(nombre);
			producto.setImage(ruta);
			producto.setPresentacion(presentacion);
			producto.setEstatus(Producto.ACTIVO);
			producto.setLinea(linea);
			producto.setImage(ruta);
			drogueria.incluirProducto(producto);
			ventanaProducto.mostrarMensaje("Registro con exito");
			clickGuardar();

		}

	}

	public void cargarImagen(String imagen) {
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image image = tk.createImage(imagen);
		ventanaProducto.getjLimagen()
				.setIcon(
						new ImageIcon(image.getScaledInstance(ventanaProducto
								.getjLimagen().getWidth(), ventanaProducto
								.getjLimagen().getHeight(),
								image.SCALE_AREA_AVERAGING)));
	}

	//Metodo que permite examinar una imagen
	
	public void subirImagen() {

		JFileChooser examinar = new JFileChooser();
		examinar.setFileSelectionMode(JFileChooser.FILES_ONLY);
		int a = examinar.showOpenDialog(examinar);
		if (a == JFileChooser.APPROVE_OPTION) {
			Toolkit tk = Toolkit.getDefaultToolkit();

			rutaim = examinar.getSelectedFile().toString();
			Image image = tk.createImage(rutaim);
			ventanaProducto.getjLimagen().setIcon(
					new ImageIcon(image.getScaledInstance(ventanaProducto
							.getjLimagen().getWidth(), ventanaProducto
							.getjLimagen().getHeight(),
							image.SCALE_AREA_AVERAGING)));
		}

	}
	
	//Metodo que permite guardar los campos y modificaciones hechas sobre determinado registro de un producto
	
	public void aceptarPoducto() {

		int indice = drogueria.buscarProducto(codigoProducto);
		Producto producto = drogueria.getUnProducto(indice);
		String codigoproducto = ventanaProducto.getJtxtcodigoproducto();
		String nombre = ventanaProducto.getjTxtNombre();
		String presentacion = ventanaProducto.getjTxtPresentacion();
		String nombre_archivodestino = ventanaProducto.getImagen();
		String codlinea = (String) ventanaProducto.getCmbLinea()
				.getSelectedItem();
		String cod = codlinea.substring(0, 4);
		int co = drogueria.buscarLinea(cod);
		Linea linea = drogueria.getUnaLinea(co);
		producto.setCodigoProducto(codigoproducto);
		producto.setNombre(nombre);
		if(estatusImagen==false){
			producto.setImage(nombre_archivodestino);
		}
		
		else{
			producto.setImage(rutaim);
		}
		producto.setPresentacion(presentacion);
		producto.setLinea(linea);
		drogueria.setUnProducto(indice, producto);

	}
	
    //Metodo que permite pegar los datos en la ventanaproducto
	
	public void modificarProducto() {

		int indice = drogueria.buscarProducto(codigoProducto);
		Producto prod = drogueria.getUnProducto(indice);
		String codigoprod = prod.getCodigoProducto();
		String nombre = prod.getNombre();
		String presentacion = prod.getPresentacion();
		String codigoLinea = prod.getLinea().getCodigoLinea();
		String ruta = prod.getImage();
		cargarImagen(ruta);
		int index = drogueria.buscarLinea(codigoLinea);
		ventanaProducto.settxtCodigoproducto(codigoprod);
		ventanaProducto.settxtnombre(nombre);
		ventanaProducto.settxtpresentacion(presentacion);
		ventanaProducto.setCmbLineaIndex(index);
		ventanaProducto.setImagen(ruta);

	}
	//Metodo que permite buscar un producto y pegar sus datos en la ventanaproducto

	public void buscarProducto() {

		int indice = drogueria.buscarProducto(codigoProducto);
		Producto prod = drogueria.getUnProducto(indice);
		String codigoproducto = prod.getCodigoProducto();
		String nombre = prod.getNombre();
		String presentacion = prod.getPresentacion();
		String codigoLinea = prod.getLinea().getCodigoLinea();
		String ruta = prod.getImage();
		cargarImagen(ruta);
		int index = drogueria.buscarLinea(codigoLinea);
		ventanaProducto.settxtCodigoproducto(codigoproducto);
		ventanaProducto.settxtnombre(nombre);
		ventanaProducto.settxtpresentacion(presentacion);
		ventanaProducto.setCmbLineaIndex(index);
		ventanaProducto.bloquearTexto();

	}
    
	//Metodo que permite eliminar un producto
	
	public void eliminarProducto() {

		String codigoProducto = ventanaProducto.getJtxtcodigoproducto();
		int cantProductos = drogueria.cantidadProductos();

		for (int i = 0; i < cantProductos; i++) {
			if (codigoProducto.equals(drogueria.getUnProducto(i)
					.getCodigoProducto()))
				drogueria.getProductos().remove(i);

		}

	}
	
	//Metodo que permite llenar el combo de la linea

	public void llenarComboLinea() {
		for (int i = 0; i < drogueria.cantidadLineas(); i++) {
			Linea linea = drogueria.getUnaLinea(i);

			if (linea.getEstaus() == 'E') {
				continue;
			}
			String line = linea.getCodigoLinea() + " "
					+ linea.getClasificacion();

			ventanaProducto.agregarLineacmbLinea(line);
		}
	}
	
	//Metodo que permite generar el codigo de un  producto

	public void generarCodigoProducto() {

		int e = drogueria.cantidadProductos() + 1;
		String numero;
		numero = "P-0" + e;
		ventanaProducto.setjTxtcodigoProducto(numero);
	}

	public void clickGuardar() {

		try {

			ventanaProducto.dispose();
			this.finalize();
		} catch (Throwable e1) {
			e1.printStackTrace();
		} finally {
			new ControladorListaProducto(drogueria);

		}
	}

	public void clickAceptar() {

		try {

			ventanaProducto.dispose();
			this.finalize();
		} catch (Throwable e1) {
			e1.printStackTrace();
		} finally {
			new ControladorListaProducto(drogueria);

		}
	}

	public void clickCancelar() {

		try {

			ventanaProducto.dispose();
			this.finalize();
		} catch (Throwable e1) {
			e1.printStackTrace();
		} finally {

		}
	}

}
